package array.stack;

import java.util.Stack;

/**
 * @ClassName IsValid
 * @Description TODO
 * @Author lenovo
 * @Date 2023-03-02 16:33
 * @Version 1.0
 * @Comment Magic. Do not touch.
 * If this comment is removed. the program will blow up
 */
public class IsValid {


    /**
     * 20. 有效的括号
     * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
     * <p>
     * 有效字符串需满足：
     * <p>
     * 左括号必须用相同类型的右括号闭合。
     * 左括号必须以正确的顺序闭合。
     * 每个右括号都有一个对应的相同类型的左括号。
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入：s = "([{}])"
     * 输出：true
     * 示例 2：
     * <p>
     * 输入：s = "()[]{}"
     * 输出：true
     * 示例 3：
     * <p>
     * 输入：s = "(]"
     * 输出：false
     * <p>
     * "(("
     * <p>
     * "){"
     */

    public boolean isValid(String s) {

        if (s.length() == 1 || s.length() == 0) {
            return false;
        }
        char[] array = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < array.length; i++) {
            char c = s.charAt(i);
            if (c == '{') {
                stack.push('}');
            } else if (c == '(') {
                stack.push(')');
            } else if (c == '[') {
                stack.push(']');
            } else {
                if (stack.size() == 0) {
                    return false;
                }
                Character pop = stack.pop();
                if (pop != c) {
                    return false;
                }
            }
        }
        if (stack.size() != 0) {
            return false;
        }

        return true;
    }

    public static void main(String[] args) {
        String s = "((";

        IsValid isValid = new IsValid();
        System.out.println(isValid.isValid(s));
    }
}